Unix Domain Socket এর Server এবং Client উদাহরণ

Computer Programming - ইউনিক্স সকেট (Unix Socket) - Unix Domain Sockets (Unix Domain Sockets)
342

নিচে Unix Domain Socket ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট প্রোগ্রাম উদাহরণ দেওয়া হলো, যা প্রক্রিয়াগুলোর মধ্যে লোকালি (একই সিস্টেমে) যোগাযোগ করতে সহায়ক। এই উদাহরণে C ভাষা ব্যবহার করা হয়েছে, এবং এটি একটি Stream Socket (SOCK_STREAM) প্রোটোকল ব্যবহার করে TCP-এর মতো ধারাবাহিক (reliable) সংযোগ তৈরি করবে।

Unix Domain Socket Server Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int server_fd, client_fd;
    struct sockaddr_un server_addr, client_addr;
    socklen_t client_len;
    char buffer[100];
    
    // 1. Socket তৈরি করা
    if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
    
    // 2. ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. Binding করা
    unlink(SOCKET_PATH); // যদি আগে থেকে কোনো ফাইল থাকে, তা মুছে ফেলা
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }
    
    // 4. Listening করা
    if (listen(server_fd, 5) < 0) {
        perror("Listen failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Server is listening...\n");

    client_len = sizeof(client_addr);
    // 5. Accepting সংযোগ
    if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len)) < 0) {
        perror("Accept failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 6. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Client: %s\n", buffer);

    // 7. ডেটা পাঠানো
    write(client_fd, "Hello from server", 17);

    // 8. Socket বন্ধ করা
    close(client_fd);
    close(server_fd);
    unlink(SOCKET_PATH); // Socket ফাইল মুছে ফেলা

    return 0;
}

Unix Domain Socket Client Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int client_fd;
    struct sockaddr_un server_addr;
    char buffer[100];

    // 1. Socket তৈরি করা
    if ((client_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. সার্ভার ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. সার্ভারের সাথে সংযোগ স্থাপন করা
    if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Connection failed");
        close(client_fd);
        exit(EXIT_FAILURE);
    }

    // 4. ডেটা পাঠানো
    char *message = "Hello from client";
    write(client_fd, message, strlen(message));

    // 5. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Server: %s\n", buffer);

    // 6. Socket বন্ধ করা
    close(client_fd);

    return 0;
}

প্রোগ্রামের বিশ্লেষণ

Server Program:

  1. Socket তৈরি: socket() ফাংশন ব্যবহার করে AF_UNIX এবং SOCK_STREAM দিয়ে একটি Unix Domain Socket তৈরি করা হয়।
  2. Binding: bind() ফাংশন ব্যবহার করে Socket-কে একটি নির্দিষ্ট পাথ (/tmp/uds_socket) এ সংযুক্ত করা হয়।
  3. Listening: listen() ফাংশন ইনকামিং সংযোগের জন্য সার্ভারকে অপেক্ষা করায়।
  4. Accepting: accept() ফাংশন ব্যবহার করে একটি ইনকামিং সংযোগ গ্রহণ করা হয়।
  5. ডেটা গ্রহণ: read() ফাংশন ক্লায়েন্ট থেকে ডেটা গ্রহণ করে।
  6. ডেটা পাঠানো: write() ফাংশন ব্যবহার করে সার্ভার ক্লায়েন্টে ডেটা পাঠায়।
  7. Socket বন্ধ করা: প্রোগ্রাম শেষে সিস্টেমের রিসোর্স মুক্ত করতে close() এবং unlink() ফাংশন ব্যবহার করে Socket বন্ধ এবং মুছে ফেলা হয়।

Client Program:

  1. Socket তৈরি: socket() ফাংশন AF_UNIX এবং SOCK_STREAM দিয়ে ক্লায়েন্টের জন্য একটি Socket তৈরি করে।
  2. সার্ভারের ঠিকানা সেটআপ: সার্ভারের ঠিকানা (পাথ) server_addr.sun_path-এ সেট করা হয়।
  3. Connection: connect() ফাংশন সার্ভারের সাথে সংযোগ স্থাপন করে।
  4. ডেটা পাঠানো: write() ফাংশন ব্যবহার করে ক্লায়েন্ট একটি বার্তা পাঠায়।
  5. ডেটা গ্রহণ: read() ফাংশন ব্যবহার করে সার্ভার থেকে ডেটা গ্রহণ করে।
  6. Socket বন্ধ করা: প্রোগ্রাম শেষে close() ফাংশন ব্যবহার করে Socket বন্ধ করা হয়।

কিভাবে প্রোগ্রামগুলো চালাবেন

প্রথমে সার্ভার প্রোগ্রাম চালু করুন:

  • সার্ভার প্রোগ্রাম চালু হলে এটি /tmp/uds_socket পাথে একটি Unix Domain Socket তৈরি করে এবং ইনকামিং সংযোগের জন্য অপেক্ষা করবে।

এরপর ক্লায়েন্ট প্রোগ্রাম চালু করুন:

  • ক্লায়েন্ট প্রোগ্রাম চালু হলে এটি সেই একই পাথে (যেখানে সার্ভার অপেক্ষমাণ রয়েছে) সংযোগ স্থাপন করবে এবং বার্তা পাঠাবে।

ক্লায়েন্ট এবং সার্ভারের মধ্যে বার্তা আদান-প্রদান:

  • ক্লায়েন্ট একটি বার্তা পাঠাবে, এবং সার্ভার সেটি গ্রহণ করে উত্তরে একটি বার্তা পাঠাবে। উভয় প্রোগ্রাম তাদের নিজ নিজ টার্মিনালে বার্তাগুলো প্রদর্শন করবে।
Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...